/*
 * @Author: Eric 184179023@.com
 * @Date: 2025-02-11 09:17:34
 * @LastEditors: Eric 184179023@.com
 * @LastEditTime: 2025-02-11 17:01:06
 * @FilePath: \ABS.OA\cloudfunctions\mcloud\project\oa\service\home_service.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 * Notes: 首页模块服务
 * Date: 2021-03-15 04:00:00 
 */

const BaseProjectService = require('./base_project_service.js');
const util = require('../../../framework/helpers/util.js');
const timeUtil = require('../../../framework/helpers/time_util.js');
const dbUtil = require('../../../framework/database/db_util.js');
const setupUtil = require('../../../framework/helpers/setup_util.js');
const constants = require('../public/constants.js');
const UserModel = require('../model/user_model.js');
const FlowModel = require('../model/flow_model.js');

class HomeService extends BaseProjectService {

	/**
	 * 获取系统配置
	 * @param {string} key 配置键名
	 * @returns {Promise<any>} 配置值
	 */
	static async getSetup(key) {
		return await setupUtil.get(key);
	}

	/**
	 * 获取首页推荐列表
	 * @param {string} userId 用户ID
	 * @returns {Promise<object>} 列表数据
	 */
	async getHomeList(userId) {
		const result = {
			projects: [],
			tasks: [],
			news: []
		};

		// 获取项目列表
		try {
			result.projects = await dbUtil.getAll('oa_project', {
				PROJECT_STATUS: ['in', [0, 1, 2]] // 进行中的项目状态
			}, { PROJECT_ADD_TIME: 'desc' }, 0, 5);

			// 格式化项目数据
			result.projects = result.projects.map(item => ({
				id: item._id,
				title: item.PROJECT_TITLE || '未命名项目',
				desc: item.PROJECT_DESC || '',
				status: item.PROJECT_STATUS,
				statusText: this._getProjectStatusText(item.PROJECT_STATUS),
				addTime: timeUtil.timestamp2Time(item.PROJECT_ADD_TIME)
			}));
		} catch (error) {
			console.error('获取项目列表失败:', error);
		}

		// 获取任务列表
		try {
			result.tasks = await dbUtil.getAll('oa_task', {
				TASK_STATUS: ['in', [0, 1]] // 未完成的任务
			}, { TASK_ADD_TIME: 'desc' }, 0, 5);
			
			// 格式化任务数据
			result.tasks = result.tasks.map(item => ({
				id: item._id,
				title: item.TASK_TITLE || '未命名任务',
				desc: item.TASK_DESC || '',
				status: item.TASK_STATUS,
				statusText: this._getTaskStatusText(item.TASK_STATUS),
				addTime: timeUtil.timestamp2Time(item.TASK_ADD_TIME)
			}));
		} catch (error) {
			console.error('获取任务列表失败:', error);
		}

		// 获取通知公告
		try {
			result.news = await dbUtil.getAll('oa_news', {
				NEWS_STATUS: 1 // 已发布状态
			}, { NEWS_ADD_TIME: 'desc' }, 0, 5);

			// 格式化通知数据
			result.news = result.news.map(item => ({
				id: item._id,
				title: item.NEWS_TITLE || '未命名通知',
				desc: item.NEWS_DESC || '',
				addTime: timeUtil.timestamp2Time(item.NEWS_ADD_TIME)
			}));
		} catch (error) {
			console.error('获取通知列表失败:', error);
		}

		return result;
	}

	/**
	 * 获取项目状态文本
	 * @param {number} status 状态码
	 * @returns {string} 状态文本
	 */
	_getProjectStatusText(status) {
		const statusMap = {
			0: '规划中',
			1: '进行中',
			2: '已完成',
			3: '已取消'
		};
		return statusMap[status] || '未知状态';
	}

	/**
	 * 获取任务状态文本
	 * @param {number} status 状态码
	 * @returns {string} 状态文本
	 */
	_getTaskStatusText(status) {
		const statusMap = {
			0: '待处理',
			1: '处理中',
			2: '已完成',
			9: '已取消'
		};
		return statusMap[status] || '未知状态';
	}
}

module.exports = HomeService;